package com.shujia

import scala.io.{BufferedSource, Source}

object Demo11CaseClass {
  /**
   * 1、样例类 对象在创建的时候可以省略new关键字，对象会自动获得构造方法中定义的所有属性
   * 2、所有的属性默认是由val修饰的，无法直接修改，如果需要修改可以将其设置为var
   * 3、样例类会自动实现序列化接口，可以直接在网络中传输
   * 4、样例类会重写toString方法，直接打印可以获得对象的属性，不会输出内存地址
   * 5、样例类会默认给每个属性加上类似get的方法，如果属性由var修饰则还会获得类似set的方法
   */

  case class CaseStu(var id: String, name: String, age: Int, gender: String, clazz: String)

  def main(args: Array[String]): Unit = {
    val zs: CaseStu = new CaseStu("01", "zs", 18, "男", "文科二班")
    val zs2: CaseStu = CaseStu("02", "zs2", 18, "男", "文科二班")

    println(zs2.id)
    zs2.id = "002"
    println(zs2.id)
    println(zs)
    println(zs2)

    val bs: BufferedSource = Source
      .fromFile("scala/data/stu/students.txt")


    bs
      .getLines()
      .map(line => {
        val splits: Array[String] = line.split(",")
        CaseStu(splits(0), splits(1), splits(2).toInt, splits(3), splits(4))
      })
      // 过滤出文科二班的学生
      .filter(_.clazz == "文科二班")
      .foreach(stu => println(s"${stu.id},${stu.name},${stu.clazz}"))


    bs.close()


  }

}
